#include <iostream>
#include "fib_mod.h"

//Факультативная задача на программирование. Даны целые числа n и m (1≤n≤10^18, 2≤m≤10^5),
//необходимо найти остаток от деления n-го числа Фибоначчи на m.

int main()
{
    unsigned long long n = 0;
    unsigned long long m = 0;

    std::cout << m;
    while (1)
    {
        std::cout << "input integer in range [1, 10^18]: ";
        std::cin >> n;

        if (n < 1 || n > (unsigned long long)1e18)
        {
            std::cout << "invalid input data" << std::endl;
            continue;
        }

        std::cout << "input integer in range [2, 10^5]: ";
        std::cin >> m;

        if (m < 2 || m > (unsigned long long)1e5)
        {
            std::cout << "invalid input data" << std::endl;
            continue;
        }

        try
        {
            std::cout << "fib(" << n << ") mod " << m << " = " << fib_mod(n, m) << std::endl;
        }
        catch(const std::exception &ex)
        {
            std::cout << ex.what() << std::endl;
        }
    }

    return 0;
}

